package com.cqupt.service;

import javax.lang.model.element.NestingKind;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 警告相关接口
 **/
public interface ProblemService {
    /**
     * 获取未处理的警告，分页并格式化
     *
     * @param severities 选择的严重等级
     * @param hostIds 选择的hostIds
     * @param curPage 选择的当前页
     * @param pageSize 每页大小
     * @return result(消息list)，dataNum(总条数)
     */
    Map<String, Object> getUnhandledProblems(String severities, String hostIds, String curPage, String pageSize,String objectid);

    /**
     * 获取未处理的警告的分类统计
     *
     * @return 存储严重等级分类统计的String[]
     */
    String[] getUnhandledProblemsCount();

    /**
     * 获取已处理告警，分页并格式化
     *
     * @param severities 选择的严重等级
     * @param hostIds 选择的主机
     * @param dateStr 选择的时间范围
     * @param curPage 选择的当前页
     * @param pageSize 每页大小
     * @return result(消息list)，dataNum(总条数)
     */
    Map<String, Object> getAcknowledgedProblems(String severities, String hostIds, String dateStr, String curPage, String pageSize);

    /**
     * 获取已处理告警的分类统计
     *
     * @return 存储严重等级分类统计的String[]
     */
    String[] getAcknowledgedProblemsCount();  //获取所有历史警告的分类统计
    String[] getAcknowledgedProblemsCount(String dateStr);  //获取所有历史警告的分类统计

    String[] getAcknowledgedProblemsCount_New(String severities, String hostIds,String dateStr);  //获取所有历史警告的分类统计


    /**
     * 确认问题
     *
     * @param eventId 要关闭的eventids
     * @param desc 描述
     * @return result(eventids)，error(是否错误boolean)
     */
    Map<String, Object> acknowledgeProblem(String eventId, String desc);

    /**
     * 关闭问题
     *
     * @param eventIds 要关闭的eventids
     * @return result(eventids)，error(是否错误boolean)
     */
    Map<String, Object> closeProblem(String eventIds);


    /*
    * 获取当前的告警项的解决问题方案
    * */
    Map<String, Object> getSolutionByEventId(String eventid);

    /**
     * 批量关闭或者确认问题
     */
    Map<String,Object> eventHandle(List<String> eventids, Integer action);

    /**
     * 根据主机id获取与其相关的所有告警项事件(确认或未被确认)
     */
    Map<String,Object> getEventsByHostid(String hostid,Boolean acknowledged);

    /**
     *  根据关机重启结果判断是否清空历史告警事件
     */
    Map<String,Object> isClearEvent(String hostid,String eventName);

    /**
     * 根据hostid查询事件
     */
    Map<String,Object> getEventByTriggerID(String trigger, String host, String hostid);
    Map<String,Object> getEventByTriggerID(String serveries,String trigger, String host, String hostid);
    /**
     * 通过hostid获得触发器ID
     */
    Map<String,Object> getTriggerByHostID(String hostid);


    Map<String, Object> getEventByTriggerIDServeries(String serveries,String trigger,String hostid,String host);


    /**
     * 获得最近未处理告警
     * 分页
     * 获得所有事件信息
     * 获得所有事件数量
     * @return
     */
    Map<String,Object> PagingHostList(String severities, String hostIds, String curPage, String pageSize);
    List<Map<String,Object>> getAllRecentProblemEvents(String curPage, String pageSize);
    Map<String,Object> getAllRecentProblemEventsCounts();

    /**
     * 获得选中的最近未处理告警
     * 分页
     * 获得所有事件信息
     * 获得所有事件数量
     * @return
     */
    Map<String,Object> PagingAlterHostList(String severities, String hostIds, String hostNames,String currentPage,String pageSize);
    List<Map<String,Object>> getAlterAllRecentProblemEventsCounts(String severities,String hostIds,String hostNames);
    List<Map<String,Object>> getAlterAllRecentProblemEvents(String severities,String hostIds,String hostNames,String currentPage,String pageSize);


    /**
     * 根据索引删除当前页的告警项（还需明确）
     * @param index
     * @return
     */
    Map<String,Object> deleteARecentProblemEvents(String index);
    /**
     *
     */
    List<Map<String, Object>> getAllOnlineHostName(String hostid);
    List<Map<String, Object>> getAllOnlineHostName();


    List<Map<String,Object>> getProblemByObjectID(String objectid);

    List<Map<String, Object>> getProblemsAndAcknowledgedProblems(String token,String severities, String hostIds, String dateStr,int returnType);

    Map<String, Object> ignoreknowledgeProblem(String eventId, String desc);
    //获取触发器ID
    Map<String, Object> getObjectid(String token, String eventIds);

    // 根据主机hostid获取其当前未处理告警信息，并根据严重等级进行分类
    List<Map<String,Object>> getAlertInformationByHostids(ArrayList<String> hostids);


    // 获得所有未处理告警
    List<Map<String, Object>> getAllCurrentUnhandledProblems(String token, String severities, String hostIds);


    List<Map<String, Object>> getProblems(String token, boolean acknowledged, String severities, String hostIds, String dateStr);


    List<Map<String, Object>> getProblems_new( boolean acknowledged,String severities, String hostIds, String dateStr);

    //7天内每天的未处理告警数据
    Map<String, Object> getWeekUnhandledEvents();

    //7天内每天的已处理告警总数
    Map<String,Object> getWeekProcessedEvents();
}
